# Darren
# 2025年02月20日19时33分16秒
# 单例模式：最简单的设计模式  类创建的对象，在系统中只有唯一的一个实例（对象）
class MusicPlayer:
    instance = None  # 类属性，定义类属性记录单例引用

    def __new__(cls, *args, **kwargs):  # 创建对象时，new方法自动优先调用
        if cls.instance is None:  # 类属性未被赋值
            print("创建对象，分配空间")
            cls.instance = super().__new__(cls)  # 为对应对象分配空间
        # 返回！！！
        return cls.instance

    def __init__(self, name):  # 避免多次初始化，可另设标志位类属性
        print("初始化对象")  # new方法先于Init方法执行
        self.name = name


if __name__ == '__main__':
    player1 = MusicPlayer("Music1")  # cls.instance 即 player1
    player2 = MusicPlayer("Music2")  # cls.instance is not None -> 不会分配空间
    print(id(player1), id(player2))  # player1 player2 是同一个对象
